

import asyncio
import time


async def main():
    print('hello')
    await asyncio.sleep(1)
    print('world')


async def say_after(delay, what):
    await asyncio.sleep(delay)
    print(what)


async def main2():
    print(f'started at {time.strftime("%X")}')
    await say_after(1, 'hello')
    await say_after(2, 'world')
    print(f'started at {time.strftime("%X")}')


# asyncio.create_task() 函数用来并发运行作为 asyncio 任务 的多个协程。

async def main3():
    task1 = asyncio.create_task(say_after(1, 'hello'))
    task2 = asyncio.create_task(say_after(2, 'world'))
    print(f'started at {time.strftime("%X")}')
    await task1
    await task2
    print(f'started at {time.strftime("%X")}')

# python311
# asyncio.TaskGroup 类提供了 create_task() 的更现代化的替代。
# 当存在上下文管理器时 await 是隐式执行的。
if __name__ == '__main__':
    # 函数用来运行最高层级的入口点 "main()" 函数
    # asyncio.run(main())
    asyncio.run(main2())
    # asyncio.run(main3())
